package com.banban.user.controller;

import com.banban.user.dto.*;
import com.banban.user.service.PromptTemplateService;
import com.banban.user.vo.DataResult;
import com.banban.user.vo.PromptTemplateVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.Valid;

@RestController
@RequestMapping("/template")
@Slf4j
public class PromptTemplateController {

    @Resource
    private PromptTemplateService promptTemplateService;

    /**
     * 添加提示词模板接口
     * @param dto
     * @return
     */
    @PostMapping("/add")
    public DataResult add(@RequestBody @Valid PromptTemplateAddDTO dto) {
        log.info("添加提示词模板接口，入参:{}",dto);
        PromptTemplateVO vo = promptTemplateService.add(dto);
        return DataResult.success(vo);
    }

    /**
     * 根据id查询提示词模板详情接口
     * @param id
     * @return
     */
    @GetMapping("/getById/{id}")
    public DataResult getById(@PathVariable("id") String id) {
        log.info("根据id查询提示词模板详情接口，入参:{}",id);
        PromptTemplateVO vo = promptTemplateService.getPromptById(id);
        return DataResult.success(vo);
    }

    /**
     * 编辑提示词模板接口
     * @param dto
     * @return
     */
    @PostMapping("/updatePromptTemplate")
    public DataResult updatePromptTemplate(@RequestBody @Valid PromptTemplateUpdateDTO dto) {
        log.info("编辑提示词模板接口，入参:{}",dto);
        promptTemplateService.updatePromptTemplate(dto);
        return DataResult.success();
    }

    /**
     * 删除提示模板接口
     * @param id
     * @return
     */
    @PostMapping("/delete/{id}")
    public DataResult delete(@PathVariable("id") String id) {
        log.info("删除提示模板接口，入参:{}",id);
        promptTemplateService.delete(id);
        return DataResult.success();
    }

    /**
     * 分页查询提示模板
     * @param dto
     * @return
     */
    @PostMapping("/page")
    public DataResult page(@RequestBody PromptTemplatePageDTO dto) {
        log.info("分页查询提示模板，入参:{}",dto);
        IPage<PromptTemplateVO> vo = promptTemplateService.selectPage(dto);
        return DataResult.success(vo);
    }

    /**
     * 发布/下架提示模板
     * @param dto
     * @return
     */
    @PostMapping("/publish")
    public DataResult publish(@RequestBody @Valid PublishPromptTemplateDTO dto) {
        log.info("发布提示模板，入参:{}",dto);
        promptTemplateService.publish(dto);
        return DataResult.success();
    }

    /**
     * 保存提示模板详细内容
     * @param dto
     * @return
     */
    @PostMapping("/updateDetail")
    public DataResult updateDetail(@RequestBody @Valid PromptUpdateDetailDTO dto) {
        log.info("保存提示模板详细内容，入参:{}",dto);
        promptTemplateService.updateDetail(dto);
        return DataResult.success();
    }

    /**
     * 保存并发布提示模板详细内容
     * @param dto
     * @return
     */
    @PostMapping("/publishDetail")
    public DataResult publishDetail(@RequestBody @Valid PromptUpdateDetailDTO dto) {
        log.info("保存并发布提示模板详细内容，入参:{}",dto);
        promptTemplateService.publishDetail(dto);
        return DataResult.success();
    }

}
